package ucla.axelia.modelo.data;

import java.text.DateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.TimeZone;

import org.hibernate.validator.ClassValidator;
import org.hibernate.validator.Digits;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Range;
import org.hibernate.validator.Size;

import ucla.axelia.modelo.beans.RespuestaCerrada;

/**
 * ActividadPlanificada generated by MyEclipse Persistence Tools
 */

public class ActividadPlanificada extends DataGenerica {

	// Fields
	private Integer idActividadPlanificada;
	private Actividad actividad;
	private ActividadEjecutada actividadEjecutada;
	private Date fechaInicioActividadPlanificada = new Date();
	private Date fechaFinActividadPlanificada = new Date();
	private Integer cantidadHorasActividadPlanificada = new Integer(0);
	private Date fechaRegistro = new Date();
	private Date horaRegistro = new Date();
	private String descripcionActividadPlanificada;
	private String suspendida = RespuestaCerrada.NO;
	private Set cantidadvoluntarioProgramas = new HashSet(0);
	private Set<ActividadSuspendida> actividadSuspendidas = new HashSet<ActividadSuspendida>(0);
	private Set<VoluntarioAsignado> voluntarioAsignados = new HashSet<VoluntarioAsignado>(0);
	private Set horarioActividadPlanificadas = new HashSet(0);

	// Constructors

	/** default constructor */
	public ActividadPlanificada() {
	}

	/** minimal constructor */
	public ActividadPlanificada(Integer idActividadPlanificada,
			Actividad actividad, Date fechaInicioActividadPlanificada,
			Date fechaFinActividadPlanificada,
			Integer cantidadHorasActividadPlanificada, String estado,
			Date fechaRegistro, Date horaRegistro, String suspendida) {
		this.idActividadPlanificada = idActividadPlanificada;
		this.actividad = actividad;
		this.fechaInicioActividadPlanificada = fechaInicioActividadPlanificada;
		this.fechaFinActividadPlanificada = fechaFinActividadPlanificada;
		this.cantidadHorasActividadPlanificada = cantidadHorasActividadPlanificada;
		super.setEstado(estado);
		this.fechaRegistro = fechaRegistro;
		this.horaRegistro = horaRegistro;
		this.suspendida = suspendida;
	}

	/** full constructor */
	public ActividadPlanificada(Integer idActividadPlanificada,
			Actividad actividad, ActividadEjecutada actividadEjecutada,
			Date fechaInicioActividadPlanificada,
			Date fechaFinActividadPlanificada,
			Integer cantidadHorasActividadPlanificada, String estado,
			Date fechaRegistro, Date horaRegistro,
			String descripcionActividadPlanificada, String suspendida,
			Set cantidadvoluntarioProgramas, Set actividadSuspendidas,
			Set<VoluntarioAsignado> voluntarioAsignados, Set horarioActividadPlanificadas) {
		this.idActividadPlanificada = idActividadPlanificada;
		this.actividad = actividad;
		this.actividadEjecutada = actividadEjecutada;
		this.fechaInicioActividadPlanificada = fechaInicioActividadPlanificada;
		this.fechaFinActividadPlanificada = fechaFinActividadPlanificada;
		this.cantidadHorasActividadPlanificada = cantidadHorasActividadPlanificada;
		super.setEstado(estado);
		this.fechaRegistro = fechaRegistro;
		this.horaRegistro = horaRegistro;
		this.descripcionActividadPlanificada = descripcionActividadPlanificada;
		this.suspendida = suspendida;
		this.cantidadvoluntarioProgramas = cantidadvoluntarioProgramas;
		this.actividadSuspendidas = actividadSuspendidas;
		this.voluntarioAsignados = voluntarioAsignados;
		this.horarioActividadPlanificadas = horarioActividadPlanificadas;
	}

	// Property accessors

	public Integer getIdActividadPlanificada() {
		return this.idActividadPlanificada;
	}

	public void setIdActividadPlanificada(Integer idActividadPlanificada) {
		this.idActividadPlanificada = idActividadPlanificada;
	}

	@NotNull(message="{error.seleccione} LA ACTIVIDAD.")
	public Actividad getActividad() {
		return this.actividad;
	}

	public void setActividad(Actividad actividad) {
		this.actividad = actividad;
	}	

	public ActividadEjecutada getActividadEjecutada() {
		return this.actividadEjecutada;
	}

	public void setActividadEjecutada(ActividadEjecutada actividadEjecutada) {
		this.actividadEjecutada = actividadEjecutada;
	}

	@NotNull(message="{error.seleccione} LA FECHA DE INICIO.")
	public Date getFechaInicioActividadPlanificada() {
		return this.fechaInicioActividadPlanificada;
	}

	public void setFechaInicioActividadPlanificada(
			Date fechaInicioActividadPlanificada) {
		this.fechaInicioActividadPlanificada = fechaInicioActividadPlanificada;
	}

	@NotNull(message="{error.seleccione} LA FECHA DE FIN.")
	public Date getFechaFinActividadPlanificada() {
		return this.fechaFinActividadPlanificada;
	}

	public void setFechaFinActividadPlanificada(
			Date fechaFinActividadPlanificada) {
		this.fechaFinActividadPlanificada = fechaFinActividadPlanificada;
	}

	@Digits(integerDigits=3, message="{error.pattern} LA CANTIDAD DE HORAS.")
	@Range(min=1, max=99, message="LA CANTIDAD DE HORAS {error.range} {min} y {max}.")
	public Integer getCantidadHorasActividadPlanificada() {
		return this.cantidadHorasActividadPlanificada;
	}

	public void setCantidadHorasActividadPlanificada(
			Integer cantidadHorasActividadPlanificada) {
		this.cantidadHorasActividadPlanificada = cantidadHorasActividadPlanificada;
	}

	@NotNull(message="{error.seleccione} LA FECHA DE REGISTRO.")
	public Date getFechaRegistro() {
		return this.fechaRegistro;
	}

	public void setFechaRegistro(Date fechaRegistro) {
		this.fechaRegistro = fechaRegistro;
	}

	@NotNull(message="{error.seleccione} LA HORA DE REGISTRO.")
	public Date getHoraRegistro() {
		return this.horaRegistro;
	}

	public void setHoraRegistro(Date horaRegistro) {
		this.horaRegistro = horaRegistro;
	}
	
	@Length(max=250,message="LA DESCRIPCION {error.longitud}.")
    @NotEmpty(message="{error.ingrese} LA DESCRIPCION.")
	public String getDescripcionActividadPlanificada() {
		return this.descripcionActividadPlanificada;
	}

	public void setDescripcionActividadPlanificada(
			String descripcionActividadPlanificada) {
		this.descripcionActividadPlanificada = descripcionActividadPlanificada;
	}
	
	@NotNull(message="{error.seleccione} SUSPENDIDA.")
	public String getSuspendida() {
		return this.suspendida;
	}

	public void setSuspendida(String suspendida) {
		this.suspendida = suspendida;
	}

	public Set getCantidadvoluntarioProgramas() {
		return this.cantidadvoluntarioProgramas;
	}

	public void setCantidadvoluntarioProgramas(Set cantidadvoluntarioProgramas) {
		this.cantidadvoluntarioProgramas = cantidadvoluntarioProgramas;
	}

	public Set<ActividadSuspendida> getActividadSuspendidas() {
		return this.actividadSuspendidas;
	}

	public void setActividadSuspendidas(Set<ActividadSuspendida> actividadSuspendidas) {
		this.actividadSuspendidas = actividadSuspendidas;
	}

	public Set<VoluntarioAsignado> getVoluntarioAsignados() {
		return this.voluntarioAsignados;
	}

	public void setVoluntarioAsignados(Set<VoluntarioAsignado> voluntarioAsignados) {
		this.voluntarioAsignados = voluntarioAsignados;
	}

	@NotNull(message="{error.seleccione} EL HORARIO.")
	@Size(min=1, message="{error.seleccione} EL HORARIO.")
	public Set getHorarioActividadPlanificadas() {
		return this.horarioActividadPlanificadas;
	}

	public void setHorarioActividadPlanificadas(Set horarioActividadPlanificadas) {
		this.horarioActividadPlanificadas = horarioActividadPlanificadas;
	}

	@Override
	public ClassValidator asignarValidator() {
		ClassValidator validator = new ClassValidator(ActividadPlanificada.class, ResourceBundle.getBundle("ucla.axelia.modelo.data.hibernate-validator"));
		return validator;
	}

	@Override
	public boolean equals(DataGenerica objeto) {
		// TODO Auto-generated method stub
		if (objeto instanceof ActividadPlanificada) {
			ActividadPlanificada actividadPlanificada = (ActividadPlanificada)objeto;
			return actividadPlanificada.idActividadPlanificada.equals(this.idActividadPlanificada);
		}
		else {
			return false;
		}
	}
	
	public boolean equals(Object objeto) {
		// TODO Auto-generated method stub
		if (objeto instanceof ActividadPlanificada) {
			ActividadPlanificada actividadPlanificada = (ActividadPlanificada)objeto;
			return actividadPlanificada.idActividadPlanificada.equals(this.idActividadPlanificada);
		}
		else {
			return false;
		}
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return this.idActividadPlanificada.toString();
	}

	public String getStrFechafinalActividadPlanificada() {
		TimeZone tz=TimeZone.getTimeZone("dd/mm/yyyy");
		DateFormat df=DateFormat.getDateInstance();
		df.setTimeZone(tz);		
		return df.format(this.fechaFinActividadPlanificada);
	}

	public String getStrFechainicioActividadPlanificada() {
		TimeZone tz=TimeZone.getTimeZone("dd/mm/yyyy");
		DateFormat df=DateFormat.getDateInstance();
		df.setTimeZone(tz);		
		return df.format(this.fechaInicioActividadPlanificada);
	}
	
	public ActividadSuspendida getActividadSuspendidaActual() {
		ActividadSuspendida actividadSuspendidaActual = new ActividadSuspendida();
		int mayor = 0;
		Iterator iter = this.actividadSuspendidas.iterator();
		while (iter.hasNext()){
			ActividadSuspendida actividadSuspendida = (ActividadSuspendida) iter.next();
			if (actividadSuspendida.getIdActividadSuspendida() > mayor) {
				mayor = actividadSuspendida.getIdActividadSuspendida();
				actividadSuspendidaActual = actividadSuspendida;
			}
		}
		return actividadSuspendidaActual;
	}
	
}